import type { columnsType, RowType } from './type';

import type { PropType } from 'vue';

// 表格组件Props接口定义
export interface FosoTableProps {
  // 表格数据
  data?: RowType[];
  // 列表数据
  columns?: columnsType[];
  // 工具栏按钮名称
  toolbarbuttonName?: string;
  // 是否显示添加按钮
  showAddButton?: boolean;
  // 是否显示编辑按钮
  showEditButton?: boolean;
  // 是否显示删除按钮
  showDeleteButton?: boolean;
  // 添加按钮文本
  addButtonText?: null | string;
  // 远程请求API
  requestApi?: (params: any) => Promise<any>;
  // 额外的表格配置
  extraTableConfig?: Record<string, any>;
}

// Props定义
export const fosoTableProps = {
  // 表格数据
  data: {
    type: Array as PropType<RowType[]>,
    default: () => [],
  },
  // 列表数据
  columns: {
    type: Array as PropType<columnsType[]>,
    default: () => [],
  },
  // 工具栏按钮名称
  toolbarbuttonName: {
    type: String,
    default: '',
  },
  // 是否显示添加按钮
  showAddButton: {
    type: Boolean,
    default: true,
  },
  // 是否显示编辑按钮
  showEditButton: {
    type: Boolean,
    default: true,
  },
  // 是否显示删除按钮
  showDeleteButton: {
    type: Boolean,
    default: true,
  },
  // 添加按钮文本
  addButtonText: {
    type: String as PropType<null | string>,
    default: null,
  },
  // 远程请求API
  requestApi: {
    type: Function as PropType<(params: any) => Promise<any>>,
    default: () => () => Promise.resolve({}),
  },
  // 额外的表格配置
  extraTableConfig: {
    type: Object as PropType<Record<string, any>>,
    default: () => ({}),
  },
} as const;

// Props默认值 - 使用函数形式定义引用类型的默认值
export const fosoTableDefaults = {
  data: () => [],
  columns: () => [],
  toolbarbuttonName: '',
  showAddButton: true,
  showEditButton: true,
  showDeleteButton: true,
  addButtonText: null,
  requestApi: () => () => Promise.resolve({}),
  extraTableConfig: () => ({}),
};
